#include "file_utils.h"

/**
 * @brief 读取文件内容
 * @param file_path 文件路径
 * @return 文件内容字符串指针（需要调用者释放），失败返回NULL
 * 
 * 读取指定文件的内容并返回字符串
 */
char *read_file_content(const char *file_path)
{
    FILE *file = fopen(file_path, "r");          // 以只读模式打开文件
    if(file == NULL) {                           // 检查文件是否成功打开
        printf("Error: Cannot open file %s\n", file_path); // 输出错误信息
        return NULL;                             // 返回空指针
    }

    // 获取文件大小
    fseek(file, 0, SEEK_END);                    // 移动到文件末尾
    long file_size = ftell(file);                // 获取文件大小
    fseek(file, 0, SEEK_SET);                    // 回到文件开头

    if(file_size <= 0) {                         // 检查文件大小是否有效
        fclose(file);                            // 关闭文件
        printf("Error: Invalid file size\n");    // 输出错误信息
        return NULL;                             // 返回空指针
    }

    // 分配内存并读取文件内容
    char *content = (char *)malloc(file_size + 1); // 分配内存（包括字符串结束符）
    if(content == NULL) {                        // 检查内存分配是否成功
        fclose(file);                            // 关闭文件
        printf("Error: Memory allocation failed\n"); // 输出错误信息
        return NULL;                             // 返回空指针
    }

    size_t bytes_read = fread(content, 1, file_size, file); // 读取文件内容
    content[bytes_read] = '\0';                  // 添加字符串结束符

    fclose(file);                                // 关闭文件

    if(bytes_read != (size_t)file_size) {        // 检查是否读取了完整文件
        printf("Warning: File read incomplete\n"); // 输出警告信息
    }

    return content;                              // 返回文件内容
}